<?php 

/**
 * Joomla! 1.5 component retweet
 * @version 0.1
 * @author Chris Borkowski 
 * @package com_retweet
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 **/

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );


jimport('joomla.application.component.model');

  class RetweetModelCategory extends JModel
  {
  /**
* Category id
*
* @var int
*/
var $_id = null;
 /**
  * Category ata array
  *
  * @var array
  */
  var $_data = null;
 /**
  * Category total
  *
  * @var integer
  */
  var $_total = null;
 /**
  * Category data
  *
  * @var object
  */
  var $_category = null;
 /**
  * Pagination object
  *
  * @var object
  */
  var $_pagination = null;
 /**
  * Constructor
  *
  * @since 1.5
  */
  function __construct()
  {
  parent::__construct();
 global $mainframe;
 $config = JFactory::getConfig();
 // Get the pagination request variables
  $this->setState('limit', $mainframe->getUserStateFromRequest('com_retweet.limit', 'limit', $config->getValue('config.list_limit'), 'int'));
  $this->setState('limitstart', JRequest::getVar('limitstart', 0, '', 'int'));
 // In case limit has been changed, adjust limitstart accordingly
  $this->setState('limitstart', ($this->getState('limit') != 0 ? (floor($this->getState('limitstart') / $this->getState('limit')) * $this->getState('limit')) : 0));
 // Get the filter request variables
  $this->setState('filter_order', JRequest::getCmd('filter_order', 'ordering'));
  $this->setState('filter_order_dir', JRequest::getCmd('filter_order_Dir', 'ASC'));
 $id = JRequest::getVar('id', 0, '', 'int');
  $this->setId((int)$id);
  }
 /**
  * Method to set the category id
  *
  * @access public
  * @param int category ID number
  */
  function setId($id)
  {
  // Set category ID and wipe data
  $this->_id = $id;
  $this->_category = null;
  }
 /**
  * Method to get item item data for the category
  *
  * @access public
  * @return array
  */
  function getData()
  {
  // Lets load the content if it doesn't already exist
  if (empty($this->_data))
  {
  $query = $this->_buildQuery();
  $this->_data = $this->_getList($query, $this->getState('limitstart'), $this->getState('limit'));
 $total = count($this->_data);
  for($i = 0; $i < $total; $i++)
  {
  $item =& $this->_data[$i];
  $item->slug = $item->id.':'.$item->alias;
  }
  }
 return $this->_data;
  }
 /**
  * Method to get the total number of item items for the category
  *
  * @access public
  * @return integer
  */
  function getTotal()
  {
  // Lets load the content if it doesn't already exist
  if (empty($this->_total))
  {
  $query = $this->_buildQuery();
  $this->_total = $this->_getListCount($query);
  }
 return $this->_total;
  }
 /**
  * Method to get a pagination object of the item items for the category
  *
  * @access public
  * @return integer
  */
  function getPagination()
  {
  // Lets load the content if it doesn't already exist
  if (empty($this->_pagination))
  {
  jimport('joomla.html.pagination');
  $this->_pagination = new JPagination( $this->getTotal(), $this->getState('limitstart'), $this->getState('limit') );
  }
 return $this->_pagination;
  }
 /**
  * Method to get category data for the current category
  *
  * @since 1.5
  */
  function getCategory()
  {
  // Load the Category data
  if ($this->_loadCategory())
  {
  // Initialize some variables
  $user = &JFactory::getUser();
 // Make sure the category is published
  //if (!$this->_category->published) {
  //JError::raiseError(404, JText::_("Resource Not Found"));
  //return false;
  //}
  // check whether category access level allows access
  if ($this->_category->access > $user->get('aid', 0)) {
  JError::raiseError(403, JText::_("ALERTNOTAUTH"));
  return false;
  }
  }
  return $this->_category;
  }
 /**
  * Method to load category data if it doesn't exist.
  *
  * @access private
  * @return boolean True on success
  */
  function _loadCategory()
  {
  if (empty($this->_category))
  {
  // current category info
  $query = 'SELECT c.*, ' .
  ' CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(\':\', c.id, c.alias) ELSE c.id END as slug '.
  ' FROM #__categories AS c' .
  ' WHERE c.id = '. (int) $this->_id .
  ' AND c.section = "com_retweet"';
  $this->_db->setQuery($query, 0, 1);
  $this->_category = $this->_db->loadObject();
  }
  return true;
  }
 function _buildQuery()
  {
  $filter_order = $this->getState('filter_order');
  $filter_order_dir = $this->getState('filter_order_dir');
 $filter_order = JFilterInput::clean($filter_order, 'cmd');
  $filter_order_dir = JFilterInput::clean($filter_order_dir, 'word');
 // We need to get a list of all items in the given category
  $query = 'SELECT *' .
  ' FROM #__retweet' .
  ' WHERE catid = '. (int) $this->_id.
  ' AND published = 1' .
  //' AND archived = 0'.
  ' ORDER BY '. $filter_order .' '. $filter_order_dir .', ordering';
 return $query;
  }
  }